﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Persistencia_y_capa_de_negocio;
using System.Text.RegularExpressions;
using System.IO;

namespace webclonegame.FormulariosPrivada
{
    public partial class Formulario_Perfil : System.Web.UI.Page
    {
        ENUsuario usActual;
        protected void Page_Load(object sender, EventArgs e)
        {
            Avatar.Height = 100;
            Avatar.Width = 100;
            pModificarPlaneta.Visible = false;
            pCambiarGalaxia.Visible = false;
            FileUpload1.Visible = false;

            // Comprobamos si es el perfil de otro.
            int idUsuario = Convert.ToInt32(Request.QueryString.Get("id"));
            usActual = CADUsuario.Instancia.ObtenerUnUsuario(idUsuario);
            if (usActual == null)
            {
                // Mostramos el perfil propio.
                usActual = (ENUsuario)Session["UsuarioActual"];
                pModificarPlaneta.Visible = true;
                pCambiarGalaxia.Visible = true;
                FileUpload1.Visible = true;
                CargarAvatar(usActual.NombreUsuario);
            }



            // Completamos los campos del perfil con la información del usuario.
            nombreUsuario.Text = usActual.NombreUsuario;
            emailUsuario.Text = usActual.EmailUsuario;
            fechaRegistroUsuario.Text = usActual.FechaRegUsuario.ToString();
            if (usActual.NombrePlaneta == "")
                nombrePlanetaUsuario.Text = "Homeworld";
            else
                nombrePlanetaUsuario.Text = usActual.NombrePlaneta;
            cuadranteUsuario.Text = usActual.CXCuadranteUsuario + ":" + usActual.CYCuadranteUsuario;
            coordenadaUsuario.Text = usActual.CXBaseUsuario + ":" + usActual.CYBaseUsuario;
            poderUsuario.Text = usActual.CalcularPoder.ToString();

            //Creamos la gráfica
            String grafica_text = "";
            int maximo=0;
            int minimo=0;
            String valores=null;
            String indices="";
            foreach (ENUnidadesUsuario unidad in CADUnidadesUsuario.Instancia.obtenerUnidadesUsuario(usActual.IDUsuario))
            {
                if(maximo<unidad.Cantidad)
                    maximo=unidad.Cantidad;
                if(valores==null)
                    valores=(unidad.Cantidad).ToString();
                else
                    valores+=","+(unidad.Cantidad).ToString();
                indices+="|"+unidad.IDUnidad.ToString();
            }
            grafica_text="<img src=\"http://chart.apis.google.com/chart?cht=bvs&amp;chs=695x150&amp;chtt=Cantidad de Unidades&amp;chts=8080AA&amp;chco=314A70&amp;chd=t:"+valores+"&amp;chds=0,"+maximo+"&amp;chf=bg,s,00000000&amp;chxs=1,8080AA|0,8080AA&amp;chxt=x,y&amp;chxl=0:"+indices+"|1:|0|"+maximo+"&amp;chg=0,25&amp;chbh=35\">";
            grafica.Text=grafica_text;
      }

        /// <summary>
        /// Codigo para cuando quieras guardar la imagen cargada para el Usuario que le pasas por
        /// parametro.""SOLO SE PUEDE EJECUTAR CUANDO VALIDEMOS QUE UNA IMAGEN SE HA CARGADO
        /// EN EL FILE UPLOAD. De ai la condicion if (cargada==true);
        /// </summary>
        /// <param name="nombreUsuario">Cadena con el nombre del usuario</param>
        protected void GuardarAvatar(string nombreUsuario)
        {

            //Guardar la imagen.Ajustarla antes en tamaño.(Incluso en formato y asi
            //Admitimos mas tipos.
            bool cargada = (bool)ViewState["imagenCargada"];
            string ext = (string)ViewState["extension"];
            if (cargada == true)
            {
                string dirOrigen = Server.MapPath("./Avatar");
                string filename = "avatar" + ext;
                string origenPath = Path.Combine(dirOrigen, filename);
                System.Drawing.Image avatar = System.Drawing.Image.FromFile(origenPath);
                System.Drawing.Bitmap avatar2 = new System.Drawing.Bitmap(avatar, new System.Drawing.Size(50, 50));
                string ruta = Server.MapPath("~");
                ruta = ruta.Remove(ruta.LastIndexOf(@"webclonegame\"));
                ruta = Path.Combine(ruta, @"clonegame\imagenes\usuarios");
                string fDestino = nombreUsuario + ".png";
                string desPath = Path.Combine(ruta, fDestino);
                avatar2.Save(desPath, System.Drawing.Imaging.ImageFormat.Png);
                string filename2 = nombreUsuario + ".png";
                string dirOrigen2 = Server.MapPath("~/FormulariosPublica/Avatar/");
                string desPath2 = Path.Combine(dirOrigen2, filename2);
                avatar2.Save(desPath2, System.Drawing.Imaging.ImageFormat.Png);
            }
        }

        /// <summary>
        /// Codigo para cuando quieras cargar el avatar.
        /// </summary>
        protected void CargarAvatar(string nombreUsuario)
        {
            string fOrigen = nombreUsuario + ".png";
            string oriPath = "~/FormulariosPublica/Avatar/" + fOrigen;
            Avatar.ImageUrl = oriPath;

        }

        protected void btAbandonarPlaneta_Click(object sender, EventArgs e)
        {
            CADUsuario.Instancia.EliminarUsuario(usActual.IDUsuario);
            Session.Abandon();
            Response.Redirect("~/FormulariosPublica/empezar.aspx");
        }

        protected void btRenombrarPlaneta_Click(object sender, EventArgs e)
        {
            usActual.NombrePlaneta = nuevoNombrePlaneta.Text;
            nombrePlanetaUsuario.Text = nuevoNombrePlaneta.Text;
            CADUsuario.Instancia.InsertarUsuario(usActual);
        }

        protected void btCargarImagen_Click(object sender, EventArgs e)
        {
            //IMPORTANTE.Cuando pinches en cargar, se van a borrar los datos de objeto usurio
            //por eso tengo que meterlo en una variable de tipo ViewState tb.
            //esto es porque el evento click del boton recarga la pagina.
            //ViewState["Usuario"] = usActual;
            //lbErrorImagen.Text = "";
            if (FileUpload1.HasFile)//Compruebo si se ha cargado algún archivo.
            {
                string fileExt = System.IO.Path.GetExtension(FileUpload1.FileName);

                if (fileExt == ".png" || fileExt == ".jpg" || fileExt == ".gif")//Compruebo que se trata de un archivo png
                {
                    try
                    {

                        string destDir = Server.MapPath("./Avatar");
                        string filename = "avatar" + fileExt;
                        string destPath = Path.Combine(destDir, filename);
                        //La idea es que para mostrar la imagen se guarda siempre en
                        //el mismo archivo, luego ya si se crea el usuario, la guardamos
                        //con su nombre en el directorio de las imagenes.
                        FileUpload1.PostedFile.SaveAs(destPath);
                        //Ahora mostrar la imagen
                        Avatar.ImageUrl = "./Avatar/avatar" + fileExt;
                        Avatar.Height = 100;
                        Avatar.Width = 100;
                        ViewState["extension"] = fileExt;
                        ViewState["imagenCargada"] = true;


                    }
                    catch (Exception ex)
                    {
                        lbErrorImagen.Text = "Error al cargar la imagen: \n" + ex.Message.ToString();
                    }
                }
                else
                {
                    lbErrorImagen.Text = "Error. Solo se permiten archivos de imagen png, jpg o gif";
                }
            }
            else
            {
                lbErrorImagen.Text = "Error. No has seleccionado ninguna imagen";
            }
        }

        protected void btGuardarImagen_Click(object sender, EventArgs e)
        {
            ENUsuario us = (ENUsuario)Session["UsuarioActual"];
            GuardarAvatar(us.NombreUsuario);
        }
    }
}
